package co.com.fenoco.encuentas.servicios;

import java.util.Collection;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import co.com.fenoco.encuentas.persistencia.DetalleSociales;
import co.com.fenoco.encuentas.persistencia.EncabezadoSociales;
import co.com.fenoco.encuentas.persistencia.EncabezadoSocialesId;
import co.com.fenoco.encuentas.servicios.dto.ConsultarEncuestaSocialesDTO;
import co.com.fenoco.encuentas.servicios.dto.FiltroConsultaSocialesDTO;

/**
 * Session Bean implementation class EncuestaSocialBean
 */
@Stateless
public class EncuestaSocialBean implements IEncuestaSocialRemote, IEncuestaSocialLocal {
	/**
	 * El contexto de persistencia.
	 */
	@PersistenceContext
	private EntityManager em;
    /**
     * Default constructor. 
     */
    public EncuestaSocialBean() {
        // TODO Auto-generated constructor stub
    }

	/* (non-Javadoc)
	 * @see co.com.fenoco.encuentas.servicios.IEncuestaSocialRemote#adicionarEncuenta(co.com.fenoco.encuentas.persistencia.EncabezadoSociales)
	 */
	@Override
	public void adicionarEncuenta(EncabezadoSociales encuesta) {
		em.persist(encuesta);
		if(encuesta.getDetalles()!=null && !encuesta.getDetalles().isEmpty()){
			for (DetalleSociales det : encuesta.getDetalles()) {
				det.setIdEncuesta(encuesta.getId().getId());
				det.setFamilia(encuesta.getId().getFamilia());
				em.persist(det);
			}
		}
	}

	/* (non-Javadoc)
	 * @see co.com.fenoco.encuentas.servicios.IEncuestaSocialRemote#modificarEncuenta(co.com.fenoco.encuentas.persistencia.EncabezadoSociales)
	 */
	@Override
	public void modificarEncuenta(EncabezadoSociales encuesta) {
		em.merge(encuesta);
		Query q = em.createQuery ("DELETE FROM DetalleSociales d WHERE d.idEncuesta=:idEncuesta AND d.familia=:familia");
		q.setParameter("familia", encuesta.getId().getFamilia());
		q.setParameter("idEncuesta", encuesta.getId().getId());
		q.executeUpdate ();
		if(encuesta.getDetalles()!=null && !encuesta.getDetalles().isEmpty()){
			for (DetalleSociales det : encuesta.getDetalles()) {
				det.setIdEncuesta(encuesta.getId().getId());
				det.setFamilia(encuesta.getId().getFamilia());
				em.persist(det);
			}
		}
	}

	/* (non-Javadoc)
	 * @see co.com.fenoco.encuentas.servicios.IEncuestaSocialRemote#eliminarEncuenta(co.com.fenoco.encuentas.persistencia.EncabezadoSociales)
	 */
	@Override
	public void eliminarEncuenta(EncabezadoSociales encuesta) {
		Query q = em.createQuery ("DELETE FROM DetalleSociales d WHERE d.idEncuesta=:idEncuesta AND d.familia=:familia");
		q.setParameter("familia", encuesta.getId().getFamilia());
		q.setParameter("idEncuesta", encuesta.getId().getId());
		q.executeUpdate ();
		em.remove(encuesta);
	}

	/* (non-Javadoc)
	 * @see co.com.fenoco.encuentas.servicios.IEncuestaSocialRemote#consultarEncuestas(co.com.fenoco.encuentas.servicios.dto.FiltroConsultaSocialesDTO)
	 */
	@Override
	public Collection<EncabezadoSociales> consultarEncuestas(
			FiltroConsultaSocialesDTO filtro) {
		// TODO Auto-generated method stub
		return null;
	}

	/* (non-Javadoc)
	 * @see co.com.fenoco.encuentas.servicios.IEncuestaSocialRemote#consultarEncuesta(co.com.fenoco.encuentas.servicios.dto.ConsultarEncuestaSocialesDTO)
	 */
	@Override
	public EncabezadoSociales consultarEncuesta(
			ConsultarEncuestaSocialesDTO consultarEncuestaSocialesDTO) {
		EncabezadoSociales retorno = null;
		retorno = em.find(EncabezadoSociales.class, new EncabezadoSocialesId(
				consultarEncuestaSocialesDTO.getIdEncuesta(),
				consultarEncuestaSocialesDTO.getFamilia()));
		if (retorno != null) {
			Query q = em
					.createQuery("SELECT d FROM DetalleSociales d WHERE d.idEncuesta=:idEncuesta AND d.familia=:familia");
			q.setParameter("familia", consultarEncuestaSocialesDTO.getFamilia());
			q.setParameter("idEncuesta",
					consultarEncuestaSocialesDTO.getIdEncuesta());
			retorno.setDetalles(q.getResultList());
		}
		return retorno;
	}
}
